package com.qhyt.utils;

import com.qhyt.generate.TitleValueVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author jie
 * @date 2020/6/17 -16:03
 */
@Component
public class StringConvertUtils {

    public static String convertNull(String s) {
        if (StringUtils.isEmpty(s)) {
            return null;
        }
        return s;
    }

    /**
     * 把newStr 拼接到oldStr上去就，用逗号分隔
     *
     * @param oldStr oldStr
     * @param newStr newStr
     * @return 字符串 str = "1,2,3";
     */
    public String updateOldStr(String oldStr, String newStr) {
        if (StringUtils.isNotEmpty(oldStr)) {

            String[] oldArray = oldStr.split(",");
            List<String> oldList = Arrays.asList(oldArray);

            if (!oldList.contains(newStr)) {

                oldList = new ArrayList<>(oldList);
                if (oldList.size() == 1 && "".equals(oldList.get(0))) {
                    oldList = new ArrayList<>();
                }

                oldList.add(newStr);
                return StringUtils.join(oldList, ",");
            }
        }
        return newStr;
    }

    /**
     * list 转换成String
     */
    public String list2String(List<String> list) {
        if (CollectionUtils.isEmpty(list)) {
            return null;
        }
        return StringUtils.join(list, ",");
    }

    /**
     * String 转换成 list
     */
    public List<String> string2List(String str) {
        if (StringUtils.isEmpty(str)) {
            return null;
        }
        String[] split = str.split(",");
        return Arrays.asList(split);
    }


    /**
     * 例：[a,b,c] → 'a','b','c'
     */
    public String listConvertSqlIn(List<String> list) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            String s = escapeParam(list.get(i));
            sb.append("'").append(s).append("'");
            if (i < list.size() - 1) {
                sb.append(",");
            }
        }
        return sb.toString();
    }

    /**
     * 转义字符串
     */
    public String escapeParam(String fieldValue) {
        fieldValue = fieldValue.replace("'", "\\'");
        return fieldValue;
    }

    /**
     * 例 ："logisticsNumberId":"string' or 1=1 -- "
     * 字符类型的注入：第一次因为字符串替换时，被转义了一次，所以此处 使用 “\\”两层转义。保证到数据库中有转义符号
     * 这里多加转义参数，适应于condition之类方法
     */
    public String escapeParam2(String fieldValue) {
        fieldValue = fieldValue.replace("'", "\\\\'");
        return fieldValue;
    }

    /**
     * 获取大写字母
     * 大写字母（A-Z）：65 （A）~ 90（Z）
     * 小写字母（a-z）：97（a） ~ 122（z）
     *
     * @return 指定长度的大写字母
     */
    public String getMajuscule(int length) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            int inVal = (int) (Math.random() * 26 + 65);
            sb.append((char) inVal);
        }

        return sb.toString();
    }


    /**
     * 获取 List<TitleValueVo> 中value值
     *
     * @return 以逗号分隔的字符串
     */
    public String titleValuesToStr(List<TitleValueVo> titleValueVoList) {
        if (CollectionUtils.isEmpty(titleValueVoList)) {
            return null;
        }
        List<String> list = new ArrayList<>();
        for (TitleValueVo titleValueVo : titleValueVoList) {
            list.add(titleValueVo.getValue());
        }
        return list2String(list);
    }

}
